﻿using BacklogParser.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BacklogParser.Models.Procedural;
using BacklogParser.Models.EventsData;

namespace BacklogParser
{
    public class RegisterDocument
    {

        public RegisterDocument()
        {
            this.Applicants = new List<Applicant>();
            this.Inventors = new List<Inventor>();
            this.Agents = new List<Agent>();
            this.PriorityClaims = new List<PriorityClaim>();
            this.ClassificationsIpcr = new List<ClassificationIpcr>();
            this.ApplicationReferences = new ApplicationReference();
            this.PublicationReferences = new PublicationReference();
            this.Licences = new List<LicenseData>();
            this.TermsOfGrant = new List<LapsedInCountry>();
            this.DatesRightsEffective = new DatesRightsEffective();
            this.CitationReferences = new List<CitationReference>();
            this.RelatedDocument = new RelatedDocument();
            this.BioDeposit = new List<BioDeposit>();
            this.OfficeSpecificBibData = new List<OfficeSpecificBibData>();
            this.OppositionData = new List<OpositionData>();
            this.Miscellaneous = new List<Title>();
            this.SearchReport = new List<SearchReport>();
            this.DesignationOfStates = new List<Models.DesignationOfStates>();
            this.InventionTitles = new List<InventionTitle>();
            this.EventData = new List<DossierEvent>();
        }

        public string Publn_Country { get; internal set; }

        public string Publn_Date { get; internal set; }

        public string DocumentId { get; internal set; }

        public string DocumentNumber { get; set; }

        public string Publn_Kind { get; internal set; }
        public string LanguageOfFiling { get; internal set; }

        public string DateApplicationRefused { get; internal set; }
        public string DateApplicationReestablished { get; internal set; }
        public string DateApplicationWithdrawnByApplicant { get; internal set; }

        public string DateOfRevocation { get; internal set; }
        public string DateApplicationDeemedWithdrawn { get; internal set; }

        public List<Agent> Agents { get; internal set; }

        public List<Applicant> Applicants { get; internal set; }
        public List<Inventor> Inventors { get; set; }

        public List<PriorityClaim> PriorityClaims { get; internal set; }

        public List<InventionTitle> InventionTitles { get; internal set; }
        public List<ClassificationIpcr> ClassificationsIpcr { get; internal set; }


        public ApplicationReference ApplicationReferences { get; internal set; }
        public PublicationReference PublicationReferences { get; internal set; }

        public List<DesignationOfStates> DesignationOfStates { get; internal set; }
        public List<LicenseData> Licences { get; internal set; }
        public List<LapsedInCountry> TermsOfGrant { get; internal set; }
        public List<CitationReference> CitationReferences { get; internal set; }
        public DatesRightsEffective DatesRightsEffective { get; internal set; }
        public List<BioDeposit> BioDeposit { get; internal set; }
        public List<OpositionData> OppositionData { get; internal set; }
        public List<OfficeSpecificBibData> OfficeSpecificBibData { get; internal set; }
        public List<Title> Miscellaneous { get; internal set; }
        public RelatedDocument RelatedDocument { get; internal set; }


        //----------------------------------------

        public List<SearchReport> SearchReport { get; internal set; }
        public List<ProceduralData> ProceduralData { get; internal set; }
        public List<DossierEvent> EventData { get; internal set; }

        public override string ToString()
        {
            var sqlGenerator = new SqlGenerator();

             sqlGenerator.GenerateSqlForDocument(this);
            return "";
        }
    }
}
